Example for Si active learning
本案例为硅体系的主动学习过程,案例位于 pwact/example/si_pwmat/
首先通过 INIT_BULK
构造初始训练集,之后使用初始训练集训练模型,并使用在 INIT_BULK 中使用微扰产生的结构做为初始构型在 300K
、500K
和 900K
做主动学习采样。
以下案例使用的 DFT 计算软件为 PWMAT,我们也提供了 VASP 版本输入文件(请参考pwact/example/si_vasp
)、CP2K版本输入文件(请参考pwact/example/si_cp2k
)和DFTB版本输入文件(请参考pwact/example/si_dftb
)。
请注意,案例中提供的DFT设置仅用于程序执行流程测试,不保证计算精度。
INIT_BULK
启动命令
进入 pwact/example/si_pwmat/init_bulk
目录
pwact init_bulk init_param.json resource.json
INIT_BULK 目录结构
INIT_BULK 的目录结构如下所示,atom.config
、POSCAR
、resource.json
、init_param.json
、relax_etot.input
、relax_etot1.input
、aimd_etot1.input
、aimd_etot2.input
为输入文件,collection
为执行后的结果汇总目录,pwdata
文件内容是预训练数据所在目录。
collection 目录
init_config_0 目录为 atom.config 进过驰豫、阔胞、缩放、微扰、aimd 后的结果汇总。
relax.config
是对atom.config
做驰豫后得到的结构文件;super_cell.config
是对relax.config
做 阔胞后得到结构文件;0.9_scale.config
和0.95_scale.config
是对super_cell.config
做晶格缩放后得到的结构文件;
0.9_scale_pertub
目录包括对0.9_scale.config
结构做晶格和原子位置微扰后得到的 30 个结构;
pwdata
目录是对微扰后的结构做按照aimd_etot1.input
做 AIMD 之后,将得到轨迹提取成 pwdata 格式后的结果目录,包括train
和valid
两个子目录,为训练集和测试集。
对于train
目录(或 valid 目录),atom_type.npy
是结构的原子类型,position.npy
是结构中原子的位置信息,energies.npy
、forces.npy
、ei.npy
、virials.npy
为结构的总能量、原子三个方向的力、原子能量和维里信息。ei.npy
、virials.npy
是可选文件,如果轨迹中不包括原子能和维里,则不提取。
目录1
example/init_bulk
├──atom.config
├──POSCAR
├──resource.json
├──init_param.json
├──relax_etot.input
├──relax_etot1.input
├──relax_etot2.input
├──aimd_etot1.input
├──aimd_etot2.input
└──collection
├──pwdata
├──init_config_0
│ ├──super_cell.config
│ ├──0.9_scale.config
│ ├──0.9_scale_pertub
│ │ ├──0.9_scale.config
│ │ ├──0_pertub.config
│ │ ├──1_pertub.config
│ │ ├──2_pertub.config
│ │ ...
│ │ └──30_pertub.config
│ ├──0.95_scale.config
│ ├──0.95_scale_pertub
│ │ ├──0.95_scale.config
│ │ ├──0_pertub.config
│ │ ├──1_pertub.config
│ │ ├──2_pertub.config
│ │ ...
│ │ └──30_pertub.config
│ ├──PWdata
│ │ ├──train
│ │ │ ├──atom_type.npy
│ │ │ ├──energies.npy
│ │ │ ├──image_type.npy
│ │ │ ├──position.npy
│ │ │ ├──ei.npy
│ │ │ ├──forces.npy
│ │ │ ├──lattice.npy
│ │ │ ├──virials.npy
│ │ ├──valid
│ │ │ ├──atom_type.npy
│ │ │ ├──energies.npy
│ │ │ ├──image_type.npy
│ │ │ ├──position.npy
│ │ │ ├──ei.npy
│ │ │ ├──forces.npy
│ │ │ ├──lattice.npy
│ │ │ ├──virials.npy
│ └──valid
├──init_config_1
...
0.95_scale_pertub 0.9_scale_pertub relaxed.config train
├──init_config_2
主动学习
我们使用 INIT_BULK 案例中的预训练数据和微扰后的结构,在 500K、800K 和 1100K 下做主动学习。
启动命令:
执行完毕 init_bulk 命令之后,进入 pwact/example/si_pwmat/
目录:
pwact run param.json resource.json
主动学习文件目录
主动学习的目录结构如下所示。
param.json
和resource.json
为主动学习输入控制文件,scf_etot.input
为主动学习做自洽计算的输入文件。
si.al
为主动学习流程记录文件,记录已执行的主动学习流程。
iter_result.txt
为主动学习每个轮次中探索和选取结构用于标注的记录。内容如下例所示:
iter.0000 Total structures 404 accurate 122 rate 30.20% selected 187 rate 46.29% error 95 rate 23.51%
iter.0001 Total structures 404 accurate 334 rate 82.67% selected 70 rate 17.33% error 0 rate 0%
iter.0000
为第一轮次的主动学习目录,iter.0001
为第二轮次的主动学习目录,以此类推。
train
、explore
、label
为主动学习轮次中对应的模型训练、探索、标记三个任务所在目录。
train 目录
对于train
目录,这里采用4
模型的委员会查询策略,训练4
个模型,这4
个模型只有网络参数的初始化值不同
,其他完全相同。0-train.job
、1-train.job
、2-train.job
、3-train.job
为执行训练任务的4
个 slurm 任务脚本。训练任务执行完毕后,将生成4
个标识任务执行成功的 tag 文件(0-tag.train.success
、1-tag.train.success
、2-tag.train.success
、3-tag.train.success
),以及4
个模型,目录为train.000
、train.001
、train.002
、train.003
。
以train.000
目录为例,train.json
为PWMLFF
模型训练的输入文件。std_input.json
为PWMLFF
输出的训练参数设置汇总。model_record
为模型的保存目录,dp_model.ckpt
为模型文件,epoch_train.dat
为在每个epoch
下的平均训练误差,为每个 epoch 训练结束后在验证集上的平均误差,保存在epoch_valid.dat
。
torch_script_module.pt
为训练结束后,使用 jitscript 工具编译 dp_model.ckpt 后的模型文件,做为力场,用于接下来在 lammps 中的模拟。
explore 目录
explore
目录包括两个子目录,md
和select
子目录。
md
目录为主动学习的探索目录,包括在不同温度、压强等条件下对初始结构调用 PWMLFF 力场做分子动力学模拟的文件(输入文件、轨迹)。
之后把模拟得到的结构(轨迹)根据委员会查询方法的上下界设置做筛选,筛选的结果保存在select
子目录。
md 子目录
md 子目录包括两个子目录,目录名称为 md.***.sys.***/md.***.sys.***.t.***
,例如 md.000.sys.000/md.000.sys.000.t.000
,
对于md.000.sys.000
目录,这里md.000
的 000 指param.json